go1.6とglideでechoフレームワークにHelloWorldする
丹内です。昨日に引き続き、軽量フレームワークであるechoを使ったgoプロジェクトを作成しました。 Mac OS Xとgo1.6.2 darwin/amd64を前提とします。
環境構築
プロジェクト用のディレクトリを作り、そこでdirenvを設定します。
.envrcには以下のように書きます。
export GOPATH=`pwd`
go製パッケージ管理ツールglideをhomebrewでインストールします。
$ brew install glide
プロジェクト用のディレクトリにREADME.mdとsrc/gosample
ディレクトリを作成します。gosample
ディレクトリ以下にプロジェクト関連のコードが入ります。
コード
src/gosample/main.go
にechoを使ったコードを作成します。
package main import ( "net/http" "github.com/labstack/echo" "github.com/labstack/echo/engine/standard" ) func main() { e := echo.New() e.GET("/", func(c echo.Context) error { return c.String(http.StatusOK, "Hello, World!") }) e.Run(standard.New(":1323")) }
glideのセットアップをします。
$ glide create [INFO] Generating a YAML configuration file and guessing the dependencies [INFO] Attempting to import from other package managers (use --skip-import to skip) [INFO] Found reference to github.com/labstack/echo [INFO] Adding sub-package engine/standard to github.com/labstack/echo $ glide install [WARN] The name listed in the config file (github.com/yuukigoodman/gosample) does not match the current location (.) [INFO] Lock file (glide.lock) does not exist. Performing update. [WARN] The name listed in the config file (github.com/yuukigoodman/gosample) does not match the current location (.) [INFO] Downloading dependencies. Please wait... [INFO] Fetching updates for github.com/labstack/echo. [INFO] Detected semantic version. Setting version for github.com/labstack/echo to v2.0.0. [INFO] Resolving imports [INFO] Downloading dependencies. Please wait... [INFO] Setting references for remaining imports [INFO] Project relies on 1 dependencies.
glide create
コマンドによってglide.yaml
とglide.lock
が作成されます。内容は以下のとおりです。
$ cat glide.yaml package: gosample import: - package: github.com/labstack/echo subpackages: - engine/standard $ cat glide.lock hash: 238739c109ca9fae333ab4d8e871691b61c5bafe97dd329c58b362c7d27ae8a9 updated: 2016-06-09T17:40:46.507475875+09:00 imports: - name: github.com/labstack/echo version: f4088cf59417809ed6292c4dcdcd14cd1a34f738 subpackages: - engine/standard - engine - log - name: github.com/labstack/gommon version: 722aa12d41c236ce78ff48eac1cafe0107ecdc9d subpackages: - log - color - name: github.com/mattn/go-colorable version: 9056b7a9f2d1f2d96498d6d146acd1f9d5ed3d59 - name: github.com/mattn/go-isatty version: 56b76bdf51f7708750eac80fa38b952bb9f32639 - name: github.com/valyala/fasttemplate version: 3b874956e03f1636d171bda64b130f9135f42cff - name: golang.org/x/net version: 3f122ce3dbbe488b7e6a8bdb26f41edec852a40b subpackages: - context - name: golang.org/x/sys version: 076b546753157f758b316e59bcb51e6807c04057 subpackages: - unix devImports: []
grade create
時、自動でmain.goが依存しているechoがglide.yamlに記載されていることがわかります。
src/gosample/vendor
以下に依存ライブラリが入るので、gitignoreへの追加も忘れないようにしましょう。
$ cat .gitignore .envrc src/gosample/vendor
最終的なディレクトリ構成は、以下のようになります。
$ tree . ├── .envrc ├── .git/ ├── .gitignore ├── README.md └── src └── gosample ├── glide.lock ├── glide.yaml ├── main.go └── vendor ├── github.com │ ├── labstack │ │ ├── echo │ │ │ ├── LICENSE │ │ │ ├── README.md (以下省略)
Hello, World
$ go run main.go
上記コマンドでサーバを立ち上げた後、ブラウザでlocalhost:1323
にアクセスします。
`
ハマりどころ
vendor
以下に入ったライブラリをimportできる機能はgolang 1.6から正式に提供され始めたものです。
そしてこの機能はGOPATH/src/myProject
のディレクトリにあるgoファイルでしか動かないようです。
変なところにmain.goを配置しないように気をつけましょう。
また、glideコマンド実行時もsrc/myProject
ディレクトリにいるようにしましょう。